﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Globalization;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DevExpress.XtraEditors;
using WindowsForms.AOnline.Model.BusinessObjects.Dictionary;
using WindowsForms.AOnline.Presenter.Dictionary.DbOption;
using WindowsForms.AOnline.View.Dictionary;
using WindowsForms.AOnline.WindowsForm.Resources;

namespace WindowsForms.AOnline.WindowsForm.FormDictionary
{
    /// <summary>
    /// 
    /// </summary>
    public partial class FrmXtraDBOption : DevExpress.XtraEditors.XtraForm,IDBOptionsView
    {
        private readonly DbOptionsPresenter _dbOptionsPresenter;

        public FrmXtraDBOption()
        {
            InitializeComponent();
            _dbOptionsPresenter = new DbOptionsPresenter(this);
        }

        private IList<DbOptionModel> dbOptions1 = new List<DbOptionModel>(); 

        public IList<Model.BusinessObjects.Dictionary.DbOptionModel> DBOptions
        {

            get
            {
                //var dbOptions = new List<DbOptionModel> 
                //{
                //    //new DbOptionModel { OptionId = "CurrencyDecimalDigits", OptionValue = spinCurrencyDecimalDigits.EditValue.ToString(), ValueType = 1,
                //    //    Description = "Số chữ số thập phân của số tiền", IsSystem = false },
                //    //new DbOptionModel { OptionId = "ExchangeRateDecimalDigits", OptionValue = spinExchangeRateDecimalDigits.EditValue.ToString(), ValueType = 1,
                //    //    Description = "Số chữ số sau dấu phẩy của tỷ giá", IsSystem = false },
                //    //new DbOptionModel { OptionId = "NumberDecimalDigits", OptionValue = spinNumberDecimalDigits.EditValue.ToString(), ValueType = 1,
                //    //    Description = "Số chữ số sau dấu phẩy của số lượng", IsSystem = false },
                //    //new DbOptionModel { OptionId = "PercentDecimalDigits", OptionValue = spinPercentDecimalDigits.EditValue.ToString(), ValueType = 1,
                //    //    Description = "Số chữ số sau dấu phẩy của hệ số, tỉ lệ", IsSystem = false },
                //    //new DbOptionModel { OptionId = "CurrencyDecimalSeparator", OptionValue = txtCurrencyDecimalSeparator.EditValue.ToString(), ValueType = 0,
                //    //    Description = "Kí tự phân cách hàng nghìn", IsSystem = false },
                //    //new DbOptionModel { OptionId = "CurrencyGroupSeparator", OptionValue = txtCurrencyGroupSeparator.EditValue.ToString(), ValueType = 0,
                //    //    Description = "Kí tự phân cách phần thập phân", IsSystem = false },
                //    //new DbOptionModel { OptionId = "NumberNegativePattern", OptionValue = cboNumberNegativePattern.SelectedIndex.ToString(CultureInfo.InvariantCulture), ValueType = 0,

                //     //   Description = "Định dạng số âm của số lượng 0 (n), 1 -n, 2 n-", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyAccountant", Value = txtCompanyAccountant.Text, ValueType = 0,
                //        Description = "Kế toán viên", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyCashier", Value = txtCompanyCashier.Text, ValueType = 0,
                //        Description = "Thủ quỹ", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyDirector", Value = txtCompanyDirector.Text, ValueType = 0,
                //        Description = "Thủ trưởng đơn vị", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyReportPreparer", Value = txtCompanyReportPreparer.Text, ValueType = 0,
                //        Description = "Người lập báo cáo", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyStoreKeeper", Value = txtCompanyStoreKeeper.Text, ValueType = 0,
                //        Description = "Thủ kho", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyAdrress", Value = txtCompanyAdrress.Text, ValueType = 0,
                //        Description = "Địa chỉ đơn vị", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyCode", Value = txtCompanyCode.Text, ValueType = 0,
                //        Description = "Mã số đơn vị", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyDistrict", Value = txtCompanyDistrict.Text, ValueType = 0,
                //        Description = "Quận/huyện mà đơn vị cư trú", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyName", Value = txtCompanyName.Text, ValueType = 0,
                //        Description = "Tên đơn vị", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyProvince", Value = txtCompanyProvince.Text, ValueType = 0,
                //        Description = "Tỉnh thành phố mà đơn vị cư trú", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyTel", Value = txtCompanyTel.Text, ValueType = 0,
                //        Description = "Số điện thoại đơn vị", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyFax", Value = txtCompanyFax.Text, ValueType = 0,
                //        Description = "Số fax", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyEmail", Value = txtCompanyEmail.Text, ValueType = 0,
                //        Description = "Địa chỉ email của đơn vị", IsSystem = false },
                //    new DbOptionModel { Code = "CompanyWebsite", Value = txtCompanyWebsite.Text, ValueType = 0,
                //        Description = "Địa chỉ website của đơn vị", IsSystem = false },
                //  //  new DbOptionModel { Code = "CompanyAddressFont", Value = txtCompanyAddressFont.Text, ValueType = 0,
                //    //    Description = "Config font chữ hiển thị địa chỉ đơn vị", IsSystem = false },
                //    //new DbOptionModel { OptionId = "CompanyCodeFont", OptionValue = txtCompanyCodeFont.Text, ValueType = 0,
                //    //    Description = "Font chữ mã số đơn vị", IsSystem = false },
                //    //new DbOptionModel { OptionId = "CompanyNameFont", OptionValue = txtCompanyNameFont.Text, ValueType = 0,
                //    //    Description = "Font chữ Tên đơn vị", IsSystem = false }
                //};
             //   return dbOptions;

                foreach (var dbOptionModel in dbOptions1)
                {
                    switch (dbOptionModel.Code) 
                    {
                        case "CompanyAccountant":
                            dbOptionModel.Value = txtCompanyAccountant.Text;
                            break;
                        case "CompanyCashier":
                            dbOptionModel.Value = txtCompanyCashier.Text;
                            break;
                        case "CompanyDirector":
                            dbOptionModel.Value = txtCompanyDirector.Text;
                            break;
                        case "CompanyReportPreparer":
                            dbOptionModel.Value = txtCompanyReportPreparer.Text;
                            break;
                        case "CompanyStoreKeeper":
                            dbOptionModel.Value = txtCompanyStoreKeeper.Text;
                            break;
                        case "CompanyAdrress":
                            dbOptionModel.Value = txtCompanyAdrress.Text;
                            break;
                        case "CompanyCode":
                            dbOptionModel.Value = txtCompanyCode.Text;
                            break;
                        case "CompanyDistrict":
                            dbOptionModel.Value = txtCompanyDistrict.Text;
                            break;
                        case "CompanyName":
                            dbOptionModel.Value = txtCompanyName.Text;
                            break;
                        case "CompanyProvince":
                            dbOptionModel.Value = txtCompanyProvince.Text;
                            break;
                        case "CompanyTel":
                            dbOptionModel.Value = txtCompanyTel.Text;
                            break;
                        case "CompanyFax":
                            dbOptionModel.Value = txtCompanyFax.Text;
                            break;
                        case "CompanyEmail":
                            dbOptionModel.Value = txtCompanyEmail.Text;
                            break;
                        case "CompanyWebsite":
                            dbOptionModel.Value = txtCompanyWebsite.Text;
                            break;
                    }
                }
                return dbOptions1;
            }
            set
            {
                if (value == null) return;
                dbOptions1 = value;
                //spinCurrencyDecimalDigits.EditValue = (from dbOption in value where dbOption.OptionId == "CurrencyDecimalDigits" select dbOption.OptionValue).First();
                //spinNumberDecimalDigits.EditValue = (from dbOption in value where dbOption.OptionId == "NumberDecimalDigits" select dbOption.OptionValue).First();
                //spinExchangeRateDecimalDigits.EditValue = (from dbOption in value where dbOption.OptionId == "ExchangeRateDecimalDigits" select dbOption.OptionValue).First();
                //spinPercentDecimalDigits.EditValue = (from dbOption in value where dbOption.OptionId == "PercentDecimalDigits" select dbOption.OptionValue).First();
                //txtCurrencyDecimalSeparator.Text = (from dbOption in value where dbOption.OptionId == "CurrencyDecimalSeparator" select dbOption.OptionValue).First();
                //txtCurrencyGroupSeparator.Text = (from dbOption in value where dbOption.OptionId == "CurrencyGroupSeparator" select dbOption.OptionValue).First();
                //cboNumberNegativePattern.SelectedIndex = int.Parse((from dbOption in value where dbOption.OptionId == "NumberNegativePattern" select dbOption.OptionValue).First());

               // txtId.EditValue = (from dbOption in value where dbOption.OptionId == "CompanyAccountant" select dbOption.Value).First();
                
                //report signature 
                txtCompanyAccountant.EditValue = (from dbOption in value where dbOption.Code == "CompanyAccountant" select dbOption.Value).First();
                txtCompanyCashier.EditValue = (from dbOption in value where dbOption.Code == "CompanyCashier" select dbOption.Value).First();
                txtCompanyDirector.EditValue = (from dbOption in value where dbOption.Code == "CompanyDirector" select dbOption.Value).First();
                txtCompanyReportPreparer.EditValue = (from dbOption in value where dbOption.Code == "CompanyReportPreparer" select dbOption.Value).First();
                txtCompanyStoreKeeper.EditValue = (from dbOption in value where dbOption.Code == "CompanyStoreKeeper" select dbOption.Value).First();

                //company info
                txtCompanyAdrress.EditValue = (from dbOption in value where dbOption.Code == "CompanyAdrress" select dbOption.Value).First();
                txtCompanyCode.EditValue = (from dbOption in value where dbOption.Code == "CompanyCode" select dbOption.Value).First();
                txtCompanyDistrict.EditValue = (from dbOption in value where dbOption.Code == "CompanyDistrict" select dbOption.Value).First();
                txtCompanyName.EditValue = (from dbOption in value where dbOption.Code == "CompanyName" select dbOption.Value).First();
                txtCompanyProvince.EditValue = (from dbOption in value where dbOption.Code == "CompanyProvince" select dbOption.Value).First();
                txtCompanyTel.EditValue = (from dbOption in value where dbOption.Code == "CompanyTel" select dbOption.Value).First();
                txtCompanyFax.EditValue = (from dbOption in value where dbOption.Code == "CompanyFax" select dbOption.Value).First();
                txtCompanyEmail.EditValue = (from dbOption in value where dbOption.Code == "CompanyEmail" select dbOption.Value).First();
                txtCompanyWebsite.EditValue = (from dbOption in value where dbOption.Code == "CompanyWebsite" select dbOption.Value).First();

                ////company font
                //txtCompanyAddressFont.EditValue = (from dbOption in value where dbOption.OptionId == "CompanyAddressFont" select dbOption.OptionValue).First();
                //txtCompanyCodeFont.EditValue = (from dbOption in value where dbOption.OptionId == "CompanyCodeFont" select dbOption.OptionValue).First();
                //txtCompanyNameFont.EditValue = (from dbOption in value where dbOption.OptionId == "CompanyNameFont" select dbOption.OptionValue).First();

                ////set number format
                //SetFormatNumber();
            }
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            try
            {
                var message = _dbOptionsPresenter.Save();
                if (message != null)
                {
                    XtraMessageBox.Show(message, ResourceHelper.GetResourceValueByName("ResDetailContent"), MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                else
                {
                    XtraMessageBox.Show(ResourceHelper.GetResourceValueByName("ResSaveDataSuccess"), ResourceHelper.GetResourceValueByName("ResDetailContent"), MessageBoxButtons.OK, MessageBoxIcon.Information);
                   
                }
            }
            catch (Exception ex)
            {
                XtraMessageBox.Show(ex.Message, ResourceHelper.GetResourceValueByName("ResExceptionCaption"), MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
           // this.Closed();
        }

        private void FrmXtraDBOption_Load(object sender, EventArgs e)
        {
            _dbOptionsPresenter.Display();
        }
    }
}